home *** CD-ROM | disk | FTP | other *** search
/ Game.EXE 2004 July / My Disc.iso / software / MediaPlayer10 / MP10Setup.exe / wmploc.DLL / 256 / MAINAPPSKIN2.JS < prev    next >
Encoding:
Text (UTF-16)  |  2004-05-27  |  87.0 KB  |  1,375 lines

  1. var g_kTaskBarWidth = 84;
  2.  
  3. var g_previousContrastMode="";
  4. var g_tracktimeTextWidth=-1;
  5.  
  6. var g_fGoingDown = true;
  7. var g_kAnimationSpeed = 25;
  8.  
  9. var g_LastVolume = -1;
  10.  
  11. //===================================================== COLOR UTILS =======================
  12. var g_services_setting;
  13. var g_clear_glass = new ColorSetting(0,0.625);
  14. var g_selectedservice_setting;
  15.  
  16. function UpdateBrandingColors()
  17. {
  18.     if (null==g_services_setting)
  19.     {
  20.         g_services_setting = new ColorSetting(svServices.backgroundImageHueShift, svServices.backgroundImageSaturation);
  21.     }
  22.     
  23.     var brandcolor = brand.colorPlayer;
  24.     if (VerifyColor(brandcolor))
  25.     {
  26.         var nextsetting = DetermineHSVOffset(g_basecolor, brandcolor);
  27.         if ( (null==g_selectedservice_setting) || (nextsetting.hue!=g_selectedservice_setting.hue) || (nextsetting.sat!=g_selectedservice_setting.sat) )
  28.         {
  29.             g_selectedservice_setting = nextsetting;
  30.             if (ServiceActive())
  31.             {
  32.                 FadeToServiceGlass();
  33.             }
  34.         }
  35.     }
  36. }
  37.  
  38. function FadeToClearGlass()
  39. {
  40.     g_clear_glass.hue = mediacenter.backHueShift;
  41.     g_services_setting = g_clear_glass;
  42.     BeginServiceBlend();
  43. }
  44.  
  45. function FadeToServiceGlass()
  46. {
  47.     g_services_setting = g_selectedservice_setting;
  48.     BeginServiceBlend();
  49. }
  50.  
  51. function BeginServiceBlend()
  52. {
  53.     g_ServiceBlendStart = new Date().getTime();
  54.     IterateServiceHue();
  55. }
  56.  
  57. function ServiceActive()
  58. {
  59.     return (app.currentTask.indexOf("Service") != -1);
  60. }
  61.  
  62. var g_serviceactive;
  63. function UpdateServiceActive()
  64. {
  65.     var newval = ServiceActive();
  66.     if (g_serviceactive!=newval)
  67.     {
  68.         g_serviceactive=newval;
  69.         if (newval)
  70.         {
  71.             FadeToServiceGlass();        
  72.         }
  73.         else
  74.         {
  75.             FadeToClearGlass();
  76.         }
  77.     }
  78. }
  79.  
  80. var g_ServiceBlendStart = new Date().getTime();
  81. var blendratepref = parseInt(theme.loadPreference('serviceblendtime'));
  82. var g_blendrate = ( isNaN(blendratepref) || (blendratepref<=0) ) ? 330 : blendratepref;
  83.  
  84. var logstr="";
  85. function IterateServiceHue()
  86. {
  87.     var currentlocation = (new Date().getTime() - g_ServiceBlendStart);
  88.     if (currentlocation > (2*g_blendrate))
  89.     {
  90.         svServices.backgroundImageHueShift = g_services_setting.hue;
  91.         svServices.backgroundImageSaturation = g_services_setting.sat;
  92.         return;
  93.     }
  94.     
  95.     //normalize 0 to 1
  96.     var scalefactor =  (currentlocation % g_blendrate) / g_blendrate; 
  97.     
  98.     //make nonlinear
  99.     scalefactor = scalefactor*scalefactor; 
  100.     
  101.     logstr+= ("-"+scalefactor);
  102.     
  103.     if (currentlocation <= g_blendrate)
  104.     {
  105.         svServices.backgroundImageSaturation = g_services_setting.sat * (1.0-scalefactor);
  106.     }
  107.     else
  108.     {
  109.         svServices.backgroundImageHueShift = g_services_setting.hue;
  110.         svServices.backgroundImageSaturation = g_services_setting.sat * scalefactor;
  111.     }
  112.     svServices.alphaBlendTo(0xff,33);
  113. }
  114.  
  115. function VerifyColor(str)
  116. {
  117.     var pound = str.slice(0,1);
  118.     if (pound!="#") return false;
  119.     var colorpart = str.slice(1);
  120.     var hexVal = parseInt("0x" + colorpart,16);
  121.     if (isNaN(hexVal) || (hexVal<0) || (hexVal>0xffffff) ) return false;
  122.     return true;
  123. }
  124.  
  125. var g_basecolor="#366AB3";
  126.  
  127. function DetermineHSVOffset(color_baseline, color_target)
  128. {
  129.     var hsv_baseline = ColorToHSV(color_baseline);
  130.     var hsv_target = ColorToHSV(color_target);
  131.     var hue_offset = (720 + hsv_target.h - hsv_baseline.h) % 360;
  132.     var satscale = (hsv_baseline.s==0) ? 1.0 : (hsv_target.s / hsv_baseline.s);
  133.     return new ColorSetting(hue_offset, satscale);
  134. }
  135.  
  136. function ColorSetting(hue,sat)
  137. {
  138.     this.hue=hue;
  139.     this.sat=sat;
  140. }
  141.  
  142. function ColorToHSV(color)
  143. {
  144.     var rgb = ColorToRGB(color);
  145.     var hsv = RGBToHSV(rgb);
  146.     return hsv;
  147. }
  148.  
  149. function ColorToRGB(color)
  150. {
  151.     var r,g,b;
  152.     var hexVal = parseInt("0x" + color.slice(1),16);
  153.     r = hexVal>>16;
  154.     g = (hexVal & 0x00FF00) >>8;
  155.     b = (hexVal & 0x0000FF);    
  156.     var reply = new RGB(r,g,b);
  157.     return reply;    
  158. }
  159.  
  160. function RGB(r,g,b)
  161. {
  162.     this.r=r;
  163.     this.g=g;
  164.     this.b=b;
  165. }
  166.  
  167. function HSV(h,s,v)
  168. {
  169.     this.h=h;
  170.     this.s=s;
  171.     this.v=v;
  172. }
  173.  
  174. function RGBToHSV(rgb)
  175. {
  176.     var min, max, h, s, v;
  177.     var r = parseInt(rgb.r)/255;
  178.     var g = parseInt(rgb.g)/255;
  179.     var b = parseInt(rgb.b)/255;
  180.     max = Math.max(Math.max(r, g), b);
  181.     min = Math.min(Math.min(r, g), b);
  182.     
  183.     v = max;
  184.     if ( max != 0 ) 
  185.     {
  186.         s = (max - min) / max; 
  187.     }
  188.     else 
  189.     {
  190.         s = 0;
  191.     }
  192.  
  193.     if ( s == 0 ) 
  194.     {
  195.         h = 0;
  196.     }
  197.     else
  198.     {
  199.         if ( r == max ) 
  200.         {
  201.             h = (g - b) / (max - min);
  202.         }
  203.         
  204.         else if ( g == max ) 
  205.         {
  206.             h = 2.0 + (b - r) / (max - min);
  207.         }
  208.         else 
  209.         {
  210.             h = 4.0 + (r - g) / (max - min);
  211.         }
  212.         h = h / 6.0;
  213.         if ( h < 0.0 ) 
  214.         { 
  215.             h = h + 1.0;
  216.         }
  217.     }
  218.     var reply = new HSV(h*360, s, v);
  219.     return reply;
  220. }
  221.  
  222. //==========================================================================================
  223.  
  224.  
  225.  
  226.  
  227.  
  228.  
  229.  
  230. var g_rgColorPresets = new Array
  231. (
  232. //====================================================================
  233. /*                   HUE     SATURATION            || TITLE         */
  234. //====================================================================
  235.     new ColorSetting(0,      1),                    // defaultblue
  236.     new ColorSetting(330,    0.491124272346497),    // teal_new
  237.     new ColorSetting(330,    1),                    // teal_current
  238.     new ColorSetting(300,    0.491124272346497),    // seagreen_new
  239.     new ColorSetting(300,    1),                    // seagreen_current
  240.     new ColorSetting(240,    0.491124272346497),    // green_new
  241.     new ColorSetting(240,    1),                    // green_current
  242.     new ColorSetting(210,    0.491124272346497),    // xpolive
  243.     new ColorSetting(210,    1),                    // olive_current
  244.     new ColorSetting(180,    0.272189348936081),    // putty
  245.     new ColorSetting(180,    1),                    // brown_current
  246.     new ColorSetting(171.48, 1.84),                 // orange 
  247.     new ColorSetting(150,    0.491124272346497),    // bronze_new
  248.     new ColorSetting(150,    1),                    // bronze_current
  249.     new ColorSetting(120,    1),                    // red_current
  250.     new ColorSetting(90,     1),                    // magenta_current
  251.     new ColorSetting(60,     0.461538463830948),    // violet_new
  252.     new ColorSetting(60,     1),                    // violet_current
  253.     new ColorSetting(30,     0.467455625534058),    // purple_new
  254.     new ColorSetting(30,     1.0),                  // purple_current
  255.     new ColorSetting(0,         0.0),                  // grey            
  256.     new ColorSetting(0,         0.272189348936081),    // xpsilver
  257.     new ColorSetting(0,      0.491124272346497)     // blue   
  258. );
  259.  
  260. var g_nCurrentColorPreset=parseInt(theme.loadPreference("CurrentColorPreset"));
  261.  
  262. function CycleColors(interval)
  263. {
  264.     if ( isNaN( g_nCurrentColorPreset ) )
  265.     {
  266.         g_nCurrentColorPreset=0;
  267.     }
  268.     else
  269.     {
  270.         g_nCurrentColorPreset = (g_nCurrentColorPreset+interval)%g_rgColorPresets.length;
  271.     }
  272.     mediacenter.backHueShift    = g_rgColorPresets[g_nCurrentColorPreset].hue;
  273.     mediacenter.backSaturation  = g_rgColorPresets[g_nCurrentColorPreset].sat;
  274. }
  275.  
  276. function InitNewControls()
  277. {
  278.     var cm = mediacenter.contrastMode;
  279.  
  280.     if ( (cm=="WB") || (cm=="BW") )
  281.     {
  282.         var IDB_APPAUTOHIDEBTN_BW               =1902;
  283.         var IDB_APPEQBTN_BW                     =1904;
  284.         var IDB_APPPLAYLISTBTN_BW               =1906;
  285.         var IDB_BTNGROUP_BW                     =1910;
  286.         var IDB_FASTFORWARD_BTN_BW              =1912;
  287.         var IDB_REWIND_BTN_BW                   =1914;
  288.         var IDB_MINCLOSE_BTNGRP_BW              =1916;
  289.         var IDB_MUTE_BTN_BW                     =1918;
  290.         var IDB_PLAY_BTN_BW                     =1920;
  291.         var IDB_PLAY_PAUSE_BTN_BW               =1922;
  292.         var IDB_RESIZE_BW                       =1924;
  293.         var IDB_SEEK_SLDR_BKG_BW                =1926;
  294.         var IDB_SOUND_BTN_BW                    =1928;
  295.         var IDB_STOP_BTN_BW                     =1930;
  296.         var IDB_TASKBAR_HANDLE_CLOSE_BW         =1932;
  297.         var IDB_TASKBAR_HANDLE_OPEN_BW          =1934;
  298.         var IDB_TASKBTNSCROLLDOWN_BW            =1936;
  299.         var IDB_VOL_SLDR_FORE_BW                =1942;
  300.         var IDB_TASKBAR_BUTTONGROUP_HOVER_BW    =1950;
  301.         var IDB_TASKBAR_BUTTONGROUP_UP_BW       =1948;
  302.         var IDB_SEEK_THUMB_BW                   =1683;
  303.         var IDB_OLDSTRBMP_VOL_THUMB_BW          =1978;
  304.         var IDB_RESTOREDOWN_BW                  =2054;
  305.         var IDB_OLDSTRBMP_PLAY_PAUSE_BTN_BW     =1922;
  306.         var IDB_SKINMODE_HUESHIFT_BW            =2075;
  307.         var IDB_DROPDOWN_BG_BW                  =2160;
  308.         var IDB_DROPDOWN_ICON_BW                =2162;
  309.  
  310.         // The resource IDs for the high contrast images are set up so that if the black on white
  311.         // version has an ID of N, the white on black has an ID of N+1
  312.         //
  313.         // "BW" means Black-on-White, which means we want to use the base resource ID (offset=0)
  314.         // "WB" means White-on-Black, which means we want to increment the BW resource ID by one (offset=1)
  315.         var offset = (cm=="BW") ? 0 : 1;
  316.         var inverseOffset = (offset==0) ? 1 : 0;
  317.         
  318.         if (""==g_previousContrastMode)
  319.         {
  320.             CacheImage("TaskBarButtons.image");
  321.             CacheImage("TaskBarButtons.downImage");
  322.             CacheImage("TaskBarButtons.hoverImage");
  323.             //CacheImage("taskbar_handle.hoverDownImage"); ??
  324.         }
  325.         
  326.         SetAllButtonImages("autohide",                  "res://wmploc/#" + (IDB_APPAUTOHIDEBTN_BW+inverseOffset));
  327.         autohide.image=                                 "res://wmploc/#" + (IDB_APPAUTOHIDEBTN_BW+offset);
  328.         SetAllButtonImages("TransportButtongroup",      "res://wmploc/#" + (IDB_BTNGROUP_BW+inverseOffset));
  329.         TransportButtongroup.image=                     "res://wmploc/#" + (IDB_BTNGROUP_BW+offset);
  330.         TransportButtongroup.disabledImage=             "res://wmploc/#" + (IDB_BTNGROUP_BW+offset);
  331.         
  332.         SetAllButtonImages("PauseButtonGroup",          "res://wmploc/#" + (IDB_OLDSTRBMP_PLAY_PAUSE_BTN_BW+inverseOffset));
  333.         PauseButtonGroup.image=                         "res://wmploc/#" + (IDB_OLDSTRBMP_PLAY_PAUSE_BTN_BW+offset);
  334.         SetAllButtonImages("ffwdGroup",                 "res://wmploc/#" + (IDB_FASTFORWARD_BTN_BW+inverseOffset));
  335.         ffwdGroup.image=                                "res://wmploc/#" + (IDB_FASTFORWARD_BTN_BW+offset);
  336.         SetAllButtonImages("rewGroup",                  "res://wmploc/#" + (IDB_REWIND_BTN_BW+inverseOffset));
  337.         rewGroup.image=                                 "res://wmploc/#" + (IDB_REWIND_BTN_BW+offset);
  338.         SetAllButtonImages("btngrpMinClose",            "res://wmploc/#" + (IDB_MINCLOSE_BTNGRP_BW+inverseOffset));
  339.         btngrpMinClose.image=                           "res://wmploc/#" + (IDB_MINCLOSE_BTNGRP_BW+offset);
  340.         SetAllButtonImages("btngrpRestore",             "res://wmploc/#" + (IDB_RESTOREDOWN_BW+offset));
  341.         SetAllButtonImages("btnResizeHide",             "res://wmploc/#" + (IDB_RESIZE_BW+offset));
  342.         SetAllButtonImages("btnResizeShow",             "res://wmploc/#" + (IDB_RESIZE_BW+offset));
  343.         btnResizeShow.transparencyColor="#FF00ff";
  344.  
  345.         if(""==g_previousContrastMode)
  346.         {
  347.             CacheImage("seek.foregroundImage");
  348.             CacheImage("seek.backgroundImage");
  349.             CacheImage("seek.thumbImage");
  350.             CacheImage("seek.thumbHoverImage");
  351.             CacheImage("seek.thumbDownImage");
  352.             CacheImage("volume.foregroundImage");
  353.             CacheImage("volume.thumbImage");
  354.             CacheImage("volume.thumbHoverImage");
  355.             CacheImage("volume.thumbDownImage");
  356.             CacheImage("Playlist_Drop_Down.dropDownImage");
  357.             CacheImage("Playlist_Drop_Down.dropDownBackgroundImage");
  358.         }
  359.         seek.foregroundImage    = "res://wmploc/#" + (IDB_SEEK_SLDR_BKG_BW+offset);
  360.         seek.backgroundImage    = "res://wmploc/#" + (IDB_SEEK_SLDR_BKG_BW+offset);
  361.         seek.thumbImage         = "res://wmploc/#" + (IDB_SEEK_THUMB_BW+offset);
  362.         seek.thumbHoverImage    = "res://wmploc/#" + (IDB_SEEK_THUMB_BW+inverseOffset);
  363.         seek.thumbDownImage     = "res://wmploc/#" + (IDB_SEEK_THUMB_BW+inverseOffset);
  364.         volume.foregroundImage  = "res://wmploc/#" + (IDB_VOL_SLDR_FORE_BW+offset);
  365.         volume.thumbImage       = "res://wmploc/#" + (IDB_OLDSTRBMP_VOL_THUMB_BW+offset);
  366.         volume.thumbHoverImage  = "res://wmploc/#" + (IDB_OLDSTRBMP_VOL_THUMB_BW+inverseOffset);
  367.         volume.thumbDownImage   = "res://wmploc/#" + (IDB_OLDSTRBMP_VOL_THUMB_BW+inverseOffset);
  368.         Playlist_Drop_Down.dropDownBackgroundImage  = "res://wmploc/#" + (IDB_DROPDOWN_BG_BW+offset);;
  369.         Playlist_Drop_Down.dropDownImage            = "res://wmploc/#" + (IDB_DROPDOWN_ICON_BW+offset);
  370.         
  371.         SetAllButtonImages("taskbar_handle", "res://wmploc/#" + (IDB_TASKBAR_HANDLE_OPEN_BW+offset));
  372.         taskbar_handle.downImage =           "res://wmploc/#" + (IDB_TASKBAR_HANDLE_CLOSE_BW+offset);
  373.         taskbar_handle.hoverDownImage =      "res://wmploc/#" + (IDB_TASKBAR_HANDLE_CLOSE_BW+offset);
  374.         SetAllButtonImages("MoreButton",     "res://wmploc/#" + (IDB_TASKBTNSCROLLDOWN_BW+offset));
  375.  
  376.         SetAllButtonImages("TaskBarButtons", "res://wmploc/#" + (IDB_TASKBAR_BUTTONGROUP_HOVER_BW+offset));
  377.         TaskBarButtons.image             =   "res://wmploc/#" + (IDB_TASKBAR_BUTTONGROUP_UP_BW+offset);
  378.  
  379.         SetAllButtonImages("CornerButtons", "res://wmploc/#" + (2046+inverseOffset));
  380.         CornerButtons.image                ="res://wmploc/#" + (2046+offset);
  381.         taskBtnNowPlayingCaption.foregroundColor = (cm=="BW") ? "black" : "white";
  382.     }
  383.  
  384.     else
  385.     {
  386.         if (g_previousContrastMode!="")
  387.         {
  388.             UnCacheAllImages();
  389.         }
  390.         btnResizeShow.transparencyColor="";
  391.         taskBtnNowPlayingCaption.foregroundColor = getDarkTextColor();
  392.     }
  393.     
  394.     
  395.     // Not sure about exposing this just yet leave it commented out until we get a ruling
  396.     // If enabled, verify app start up perf regressions before checking in the enabled code
  397.     
  398.     // If XP or better and DVD is available update the TaskButton
  399.     //
  400. /*    if(false &&  player.dvd.isAvailable("dvddecoder"))
  401.     {
  402.         taskBtnCDAudioCaption.value="res://wmploc/RT_STRING/#1279";
  403.         taskBtnCDAudio.accKeyboardShortcut="res://wmploc/RT_STRING/#2114";
  404.         taskBtnCDAudio.upToolTip="res://wmploc/RT_STRING/#1280";
  405.         taskBtnCDAudio.downToolTip="res://wmploc/RT_STRING/#1280";
  406.         taskBtnCDAudio.accName="res://wmploc/RT_STRING/#2162";
  407.     }
  408. */  
  409.     g_previousContrastMode=cm;
  410.     g_bufferingProgress = player.network.bufferingProgress;
  411.     
  412.     if (app.titleBarVisible)
  413.     {
  414.         btngrpMinClose.alphablend       = 0;
  415.     }
  416.    
  417.     OnOpenStateChangeTransport(player.openState);
  418.     OnPlayStateChangeTransport(player.playState);
  419.     OnStatusChangeTransport(player.status);
  420.     player.settings.mute = (theme.loadPreference("mute")=="True");
  421. }
  422.  
  423. var g_textMargin=parseInt(theme.loadString("res://wmploc/RT_STRING/#1272"));
  424. var g_tracktimeMargin = 2*g_textMargin + 10; //running_background_plugins.width is 10
  425. function LayoutMarquee()
  426. {
  427.     if ( (g_tracktimeTextWidth!=-1) && (g_tracktimeTextWidth == tracktime.textwidth)) return;
  428.     g_tracktimeTextWidth = tracktime.textwidth;
  429.     var marqueeSize = svMarquee.width - 2;
  430.  
  431.     tracktime.horizontalAlignment='left'; 
  432.     tracktime.left = marqueeSize - tracktime.textwidth;
  433.     tracktime.horizontalAlignment='right';
  434.  
  435.     running_background_plugins.horizontalAlignment='left'; 
  436.     running_background_plugins.left = marqueeSize - tracktime.textwidth - g_textMargin - running_background_plugins.width;
  437.     running_background_plugins.horizontalAlignment='right'; 
  438.  
  439.     metadata.width = marqueeSize - tracktime.textwidth - g_tracktimeMargin - metadata.left;
  440. }
  441.  
  442. var g_trackTimeFormat = parseInt(theme.loadPreference("TrackTimeFormat")); //0 is normal, 1 is current/total, and 2 is counting down
  443. if (isNaN(g_trackTimeFormat)) g_trackTimeFormat=0;
  444. var g_totalTrackTimeFormats = 3;
  445. function SaveTracktimeFormat()
  446. {
  447.     theme.savePreference("TrackTimeFormat", g_trackTimeFormat);
  448. }
  449.  
  450. function RotateTrackTimeFormats()
  451. {
  452.     if (isNaN(g_trackTimeFormat)) g_trackTimeFormat=0;
  453.     g_trackTimeFormat = (g_trackTimeFormat+1)%g_totalTrackTimeFormats;
  454.     UpdateTrackTime();
  455. }
  456.  
  457. function UpdateTrackTime()
  458. {
  459.     switch (g_trackTimeFormat)
  460.     {
  461.         //normal mode
  462.         case 0:
  463.             tracktime.value = player.controls.currentPositionString;
  464.             return;
  465.         //current / total mode
  466.         case 1:
  467.             tracktime.value = WMPStringsFunction_GetPositionText();
  468.             return;
  469.         //counting backwards mode
  470.         case 2:
  471.             var dur = player.currentMedia.duration;
  472.             if ( dur>0 )
  473.             {
  474.                 var curPos = player.controls.currentPosition;
  475.                 if (dur>=curPos)
  476.                 {
  477.                     tracktime.value = app.getTimeString(dur - curPos);
  478.                     return
  479.                 }
  480.             }
  481.             break;
  482.     }
  483.     tracktime.value = player.controls.currentPositionString;
  484. }
  485.  
  486. function SetAllButtonImages(btn,imagename)
  487. {
  488.         try
  489.         {
  490.                 var actualButton = eval(btn);
  491.                 if (""==g_previousContrastMode)
  492.                 {
  493.                         CacheImage(btn + ".image");
  494.                         CacheImage(btn + ".downImage");
  495.                         CacheImage(btn + ".hoverImage");
  496.                         CacheImage(btn + ".disabledImage");
  497.                         CacheImage(btn + ".hoverDownImage");
  498.                 }
  499.                 actualButton.image=imagename;
  500.                 actualButton.downImage=imagename;
  501.                 actualButton.hoverImage=imagename;
  502.                 actualButton.disabledImage=imagename;
  503.                 actualButton.hoverDownImage=imagename;
  504.         }
  505.         catch(err){}
  506. }
  507. function SetAllSliderImages(sldr, bkg, thumb)
  508. {
  509.     var actualSlider = eval(sldr);
  510.     if (""==g_previousContrastMode)
  511.     {
  512.         CacheImage(sldr + ".backgroundImage");
  513.         CacheImage(sldr + ".foregroundImage");
  514.         CacheImage(sldr + ".thumbImage");
  515.         CacheImage(sldr + ".thumbHoverImage");
  516.         CacheImage(sldr + ".thumbDownImage");
  517.     }
  518.     actualSlider.backgroundImage = bkg;
  519.     actualSlider.foregroundImage = bkg;
  520.     actualSlider.thumbImage      = thumb;
  521.     actualSlider.thumbHoverImage = thumb;
  522.     actualSlider.thumbDownImage  = thumb;
  523. }
  524.  
  525. var g_ArrayOfAllImages = new Array();
  526.  
  527. function CacheImage(imageID)
  528. {
  529.     g_ArrayOfAllImages[imageID] = eval(imageID);
  530. }
  531.  
  532. function UnCacheAllImages()
  533. {
  534.     for (var img in g_ArrayOfAllImages)
  535.     {
  536.         eval(img + ' = g_ArrayOfAllImages[img]');
  537.     }
  538.     g_ArrayOfAllImages.length=0;
  539. }
  540.  
  541. function currentTaskChange()
  542. {
  543.     var btnDown = null;
  544.     switch(app.currentTask)
  545.     {
  546.         case 'NowPlaying':
  547.             btnDown = taskBtnNowPlaying;
  548.             break;
  549.         case 'MediaLibrary':
  550.             btnDown = taskBtnMediaLibrary;
  551.             break;
  552.         case 'CDAudio':
  553.             btnDown = taskBtnCDAudio;
  554.             break;
  555.         case 'CDWrite':
  556.             btnDown = taskBtnBurn;
  557.             break;
  558.         case 'PortableDevice':
  559.             btnDown = taskBtnSync;
  560.             break;
  561.         case 'PlayerGuide':
  562.             ShowLoadingText();
  563.             btnDown = taskBtnPlayerGuide;
  564.             break;
  565.         case 'ServiceTask1':
  566.             ShowLoadingText();
  567.             btnDown = taskBtnServiceTask1;
  568.             break;
  569.         case 'ServiceTask2':
  570.             ShowLoadingText();
  571.             btnDown = taskBtnServiceTask2;
  572.             break;
  573.         case 'ServiceTask3':
  574.             ShowLoadingText();
  575.             btnDown = taskBtnServiceTask3;
  576.             break;
  577.     }
  578.     
  579.     taskBtnNowPlaying.down      = false;
  580.     taskBtnMediaLibrary.down    = false;
  581.     taskBtnCDAudio.down         = false;
  582.     taskBtnBurn.down            = false;
  583.     taskBtnSync.down            = false;
  584.     taskBtnPlayerGuide.down     = false;
  585.     taskBtnServiceTask1.down    = false;
  586.     taskBtnServiceTask2.down    = false;
  587.     taskBtnServiceTask3.down    = false;
  588.  
  589.     if (btnDown)
  590.     {
  591.         btnDown.down = true;
  592.     }
  593.     UpdateServiceActive();
  594. }
  595.  
  596. function ShowLoadingText()
  597. {
  598.     LoadingTxt.alphaBlend=0;
  599.     LoadingTxt.alphaBlendTo(0xff,4500);
  600. }
  601.  
  602. function view_onload()
  603. {
  604.     set_apptimer();
  605.     UpdateServiceButtonCount();
  606.     InitTaskbarSet();
  607.     LayoutTaskbar();
  608.     UpdateOverflowButtonVisible(true);
  609.     InitNewControls();
  610.     LayoutMarquee();
  611.     UpdateServicesVisible(OverflowBackground.left);
  612.     UpdateTaskbarVisible();
  613.     UpdateBrandingColors();
  614. }
  615.  
  616. var g_postmessagecode="";
  617. function PostMessage(code)
  618. {
  619.     var timerAlreadySet = (g_postmessagecode!="");
  620.     if (g_postmessagecode.indexOf(code)==-1)
  621.     {
  622.         g_postmessagecode+=code;
  623.     }
  624.     if (!timerAlreadySet) 
  625.     {
  626.         postMessage.alphaBlendTo(0xff,1);
  627.     }
  628. }
  629. function MessageLoop()
  630. {
  631.     var tmp = g_postmessagecode;
  632.     g_postmessagecode="";
  633.     eval(tmp);
  634. }
  635.  
  636. function view_height_onchange()
  637. {
  638.     PostMessage("UpdateTaskbarVisible();");
  639. }
  640.  
  641. function view_width_onchange()
  642. {
  643.     HandleTaskBarResize();
  644.     PostMessage("HandleTaskBarResize();");
  645. }
  646.  
  647. var g_taskBarHideHeight=200;
  648. function UpdateTaskbarVisible()
  649. {
  650.     svTaskButtons.visible = ShouldWeShowTheTaskbar();
  651. }
  652.  
  653. function ShouldWeShowTheTaskbar()
  654. {
  655.     return app.taskBarVisible && (svEntireApp.height > g_taskBarHideHeight);
  656. }
  657.  
  658.  
  659. function CheckShowCloseMinimizeButtons()
  660. {
  661.     return (!app.titleBarVisible);
  662. }
  663.  
  664. function UpdateTitleBarRelatedUI()
  665. {
  666.     var showMinCloseButtons = CheckShowCloseMinimizeButtons();
  667.     if (btnMinimize.enabled != showMinCloseButtons)
  668.     {
  669.         btnMinimize.enabled = showMinCloseButtons;
  670.         if (showMinCloseButtons) btngrpMinClose.visible = true;
  671.         btngrpMinClose.alphaBlendTo(showMinCloseButtons ? 0xff : 0, 330);
  672.     }
  673.     
  674.     if (app.titleBarVisible)
  675.     {
  676.         appautohidebtn.accName="res://wmploc.dll/RT_STRING/#2155";        
  677.     }
  678.     else
  679.     {
  680.         appautohidebtn.accName="res://wmploc.dll/RT_STRING/#2156";
  681.     }
  682.  
  683.     //svEntireApp.top = (app.titleBarVisible || app.titleBarAutoHide) ? 0 : -svAppFillTop.height;
  684.     svEntireApp.verticalAlignment="top";
  685.     var newTop=0;
  686.     var newHeight = view.height;
  687.     if (app.titleBarVisible)
  688.     {
  689.         newHeight += svAppFillTop.height;
  690.         newTop -= svAppFillTop.height;
  691.     }
  692.     svEntireApp.height = newHeight;
  693.     svEntireApp.top = newTop;
  694.     svEntireApp.verticalAlignment="stretch";
  695.     view_height_onchange();
  696. }
  697.  
  698. /*
  699. function InitNewBuyMe()
  700. {
  701.     var BuyBMP = mediacenter.getNamedString("BuyMusicButton");
  702.     var BuyURL = mediacenter.getNamedString("BuyMusicURL");
  703.  
  704.     if (BuyBMP != "" && BuyURL != "")
  705.     {
  706.         buyme.Image     = 'BuyMusicButton';
  707.         buyme.visible = true;
  708.     }
  709. }
  710. */
  711.  
  712. function ShowPlayMenu()
  713. {
  714.         mnuPlay.showEx(1);
  715. }
  716.  
  717. function UpdateTextColors()
  718. {
  719.     metadata.foregroundColor=getDarkTextColor();
  720.     var cm = mediacenter.contrastMode;
  721.     if ("BW"==cm) taskBtnNowPlayingCaption.foregroundColor = "#000000";
  722.     else if ("WB"==cm) taskBtnNowPlayingCaption.foregroundColor = "#FFFFFF";
  723.     else taskBtnNowPlayingCaption.foregroundColor = getDarkTextColor();
  724. }
  725.  
  726. function dummybutton()
  727. {
  728.     this.down = false;
  729. }
  730. //main app and fullscreen have new super ffwd buttons (ffwd_multi), but they need
  731. //a dummy button to keep transport.js from freaking out
  732. var ffwd = new dummybutton();
  733.  
  734.  
  735. function ShowTaskMenu(menu)
  736. {
  737.     var task1ON = brand.task1URL!="";
  738.     var task2ON = brand.task2URL!="";
  739.     var task3ON = brand.task3URL!="";
  740.     
  741.     menu.deleteAllItems();
  742.     menu.appendItem(1,"res://wmploc/RT_STRING/#2141");
  743.     menu.appendItem(2,"res://wmploc/RT_STRING/#2144");
  744.     menu.appendItem(3,"res://wmploc/RT_STRING/#2143");
  745.     menu.appendItem(4,"res://wmploc/RT_STRING/#2146");
  746.     menu.appendItem(5,"res://wmploc/RT_STRING/#1249");
  747.     menu.appendItem(6,"res://wmploc/RT_STRING/#2142");
  748.     
  749.     if( task1ON || task2ON || task3ON )
  750.     {
  751.         menu.appendSeparator();
  752.     }
  753.  
  754.     if( task1ON )
  755.     {    
  756.         menu.appendItem(7,brand.task1MenuText);
  757.     }
  758.         
  759.     if( task2ON )
  760.     {    
  761.         menu.appendItem(8,brand.task2MenuText);
  762.     }
  763.         
  764.     if( task3ON )
  765.     {    
  766.         menu.appendItem(9,brand.task3MenuText);
  767.     }
  768.     
  769.     var sel = menu.show();
  770.     switch (sel)
  771.     {
  772.         case 1:
  773.             app.currentTask = 'NowPlaying';
  774.             break;
  775.         case 2:
  776.             app.currentTask = 'MediaLibrary';
  777.             break;
  778.         case 3:
  779.             app.currentTask = 'CDAudio';
  780.             break;
  781.         case 4:
  782.             app.currentTask = 'CDWrite';
  783.             break;
  784.         case 5:
  785.             app.currentTask = 'PortableDevice';
  786.             break;
  787.         case 6:
  788.             app.currentTask = 'PlayerGuide';
  789.             break;
  790.         case 7:
  791.             app.currentTask = 'ServiceTask1';
  792.             break;
  793.         case 8:
  794.             app.currentTask = 'ServiceTask2'
  795.             break;
  796.         case 9:
  797.             app.currentTask = 'ServiceTask3';
  798.             break;
  799.         default:
  800.             break;
  801.     }
  802. }
  803.  
  804. function SaveSettings()
  805. {
  806.     theme.savePreference('mute',player.settings.mute);
  807.     if(false==isNaN(g_nCurrentColorPreset))
  808.     {
  809.         theme.savePreference('CurrentColorPreset',g_nCurrentColorPreset);
  810.     }
  811.     SaveTracktimeFormat();
  812. }
  813.  
  814. function AppRightClick(event)
  815. {
  816.     if ( (event.clientX < (TransportSubview.left+TransportSubview.width)) 
  817.     &&   (event.clientY > (TransportSubview.top)) )
  818.     {
  819.         mnuPlay2.top=(event.clientY-TransportSubview.top);
  820.         if (app.taskBarVisible)
  821.         {
  822.             mnuPlay2.left=event.clientX-g_kTaskBarWidth;
  823.         }
  824.         else
  825.         {
  826.             mnuPlay2.left=event.clientX;
  827.         }
  828.         mnuPlay2.showEx(1);
  829.     }
  830.     else if ( !app.titleBarVisible )
  831.     {
  832.         mnuMenubar.top=event.clientY;
  833.         mnuMenubar.left=event.clientX;
  834.         mnuMenubar.ShowEx(5);    
  835.     }
  836. }
  837.  
  838.  
  839.  
  840. //============================================================== BEGIN CRESCENT =================================================================
  841. //===============================================================================================================================================
  842. //===============================================================================================================================================
  843.  
  844. function size()
  845. {
  846.     this.tall=false;
  847.     this.wide=false;
  848. }
  849. var horizontal_caption_padding_both_sides=8; //we will just multiply by two anyway, might as well pre-multiply
  850. var vertical_caption_padding_both_sides=4;   //we will just multiply by two anyway, might as well pre-multiply
  851.  
  852. var g_TaskbarDefaultHeight=36;      //TODO - turn this back on when we have real graphics
  853. var g_ButtonDefaultWidth=64;
  854.  
  855. var g_TaskbarTall=false;
  856.  
  857. function SetTaskbarFontSize(newsize)
  858. {
  859.     for(btn in g_taskbuttons)
  860.     {
  861.         ChangeFontSize(g_taskbuttons[btn].caption, newsize);
  862.     }
  863.  
  864.     ChangeFontSize(taskBtnServiceTask1Caption, newsize);
  865.     ChangeFontSize(taskBtnServiceTask2Caption, newsize);
  866.     ChangeFontSize(taskBtnServiceTask3Caption, newsize);
  867.  
  868.     ChangeFontSize(appCaption,newsize);
  869.     ChangeFontSize(tracktime,newsize);
  870.     ChangeFontSize(metadata,newsize);
  871.     LayoutTaskbar();
  872. }
  873. function ChangeFontSize(textcontrol, newsize)
  874. {
  875.     textcontrol.fontSize=newsize;
  876.     textcontrol.value=textcontrol.value+" ";
  877.     textcontrol.value=textcontrol.value.slice(0,-1);
  878. }
  879.  
  880. function FitTaskbarButtonsToCaptions()
  881. {
  882.     if (g_taskbuttons.length==0)
  883.     {
  884.         InitTaskbarSet();
  885.     }
  886.  
  887.     var tall = false;
  888.     //chrome buttons
  889.     for (tbtn in g_taskbuttons)
  890.     {
  891.         tall = tall || ( (g_taskbuttons[tbtn].caption.height + vertical_caption_padding_both_sides) > g_TaskbarDefaultHeight);
  892.         g_taskbuttons[tbtn].wide = ( (g_taskbuttons[tbtn].caption.width + horizontal_caption_padding_both_sides) > g_ButtonDefaultWidth);
  893.     }
  894.     
  895.     //glass buttons
  896.     for (tbtn in g_servicebuttons)
  897.     {
  898.         tall = tall || ( (g_servicebuttons[tbtn].caption.height + vertical_caption_padding_both_sides) > g_TaskbarDefaultHeight);
  899.         g_servicebuttons[tbtn].wide = ( (g_servicebuttons[tbtn].caption.width + horizontal_caption_padding_both_sides) > g_ButtonDefaultWidth);
  900.     }
  901.     
  902.     SizeTaskBarButtons(tall);
  903.     SizeAuxiliaryButtonSet(tall);
  904. }
  905.  
  906. function SizeTaskBarButtons(tall)
  907. {
  908.     for (tbtn in g_taskbuttons)
  909.     {
  910.         var sz = new size();
  911.         sz.tall = tall;
  912.         sz.wide = g_taskbuttons[tbtn].wide;
  913.         ResizeChromeButton(g_taskbuttons[tbtn].button, sz);
  914.     }
  915.     
  916.     //glass buttons
  917.     for (tbtn in g_servicebuttons)
  918.     {
  919.         var sz = new size();
  920.         sz.tall = tall;
  921.         sz.wide = g_servicebuttons[tbtn].wide;
  922.         ResizeGlassButton(g_servicebuttons[tbtn].button, sz);
  923.     }
  924. }
  925.  
  926. function TestLog(str)
  927. {
  928.     try
  929.     {
  930.         //btnSmallBrandLogo2.upToolTip+="\n"+str;
  931.         Spew.appendItem(str);
  932.     }
  933.     catch(err){}
  934. }
  935.  
  936. function ResizeGlassButton(button, size)
  937. {
  938.     try
  939.     {
  940.         if (!size.tall && !size.wide)
  941.         {
  942.             button.image="res://wmploc/#5080";
  943.             button.downImage="res://wmploc/#5085";
  944.             button.hoverImage="res://wmploc/#5090";
  945.             button.mappingImage="res://wmploc/#5040";
  946.         }
  947.         else if (!size.tall && size.wide)
  948.         {
  949.             button.image="res://wmploc/#5081";
  950.             button.downImage="res://wmploc/#5086";
  951.             button.hoverImage="res://wmploc/#5091";
  952.             button.mappingImage="res://wmploc/#5041";
  953.         }
  954.         else if (size.tall && !size.wide)
  955.         {
  956.             button.image="res://wmploc/#5082";
  957.             button.downImage="res://wmploc/#5087";
  958.             button.hoverImage="res://wmploc/#5092";       
  959.             button.mappingImage="res://wmploc/#5042";
  960.         }
  961.         else
  962.         {
  963.             button.image="res://wmploc/#5083";
  964.             button.downImage="res://wmploc/#5088";
  965.             button.hoverImage="res://wmploc/#5093";       
  966.             button.mappingImage="res://wmploc/#5043";
  967.         }
  968.     }
  969.     catch(err){}
  970. }
  971.  
  972.  
  973. function ResizeChromeButton(button, size)
  974. {
  975. //    TestLog("sizing button " + button.ID );
  976. //    TestLog("    tall: " + size.tall + ", wide: " + size.wide);
  977.     try
  978.     {
  979.         if (!size.tall && !size.wide)
  980.         {
  981.             button.image="res://wmploc/#5010";
  982.             button.downImage="res://wmploc/#5020";
  983.             button.hoverImage="res://wmploc/#5030";
  984.             button.mappingImage="res://wmploc/#5040";
  985.         }
  986.         else if (!size.tall && size.wide)
  987.         {
  988.             button.image="res://wmploc/#5011";
  989.             button.downImage="res://wmploc/#5021";
  990.             button.hoverImage="res://wmploc/#5031";
  991.             button.mappingImage="res://wmploc/#5041";
  992.         }
  993.         else if (size.tall && !size.wide)
  994.         {
  995.             button.image="res://wmploc/#5012";
  996.             button.downImage="res://wmploc/#5022";
  997.             button.hoverImage="res://wmploc/#5032";       
  998.             button.mappingImage="res://wmploc/#5042";
  999.         }
  1000.         else
  1001.         {
  1002.             button.image="res://wmploc/#5013";
  1003.             button.downImage="res://wmploc/#5023";
  1004.             button.hoverImage="res://wmploc/#5033";       
  1005.             button.mappingImage="res://wmploc/#5043";
  1006.         }
  1007.     }
  1008.     catch(err){}
  1009. }
  1010.  
  1011. function SizeAuxiliaryButtonSet(tall)
  1012. {
  1013.     if (tall)
  1014.     {
  1015.         svTaskButtons.backgroundImage="res://wmploc/#5101";
  1016.         MoreButton.image="res://wmploc/#5061";
  1017.         MoreButton.downImage="res://wmploc/#5061";
  1018.         MoreButton.hoverImage="res://wmploc/#5061";
  1019.         MoreButton.mappingImage="res://wmploc/#5066";
  1020.         
  1021.         taskBtnPlayGroup.image="res://wmploc/#5051";
  1022.         taskBtnPlayGroup.hoverImage="res://wmploc/#5051";
  1023.         taskBtnPlayGroup.downImage="res://wmploc/#5051";
  1024.         taskBtnPlayGroup.mappingImage="res://wmploc/#5054";
  1025.         
  1026.         taskBtnServicesMenuGroup.image="res://wmploc/#5056";
  1027.         taskBtnServicesMenuGroup.hoverImage="res://wmploc/#5058";
  1028.         taskBtnServicesMenuGroup.downImage="res://wmploc/#5056";
  1029.         taskBtnServicesMenuGroup.mappingImage="res://wmploc/#5054";
  1030.  
  1031.         svSharkFin.backgroundImage="res://wmploc/#5071";
  1032.         svSharkFinBottom.backgroundImage="res://wmploc/#5074";
  1033.         
  1034.         svServices.backgroundImage="res://wmploc/#5111";
  1035.         svServicesEndcapRight.backgroundImage="res://wmploc/#5116";
  1036.     }
  1037.     else
  1038.     {
  1039.         svTaskButtons.backgroundImage="res://wmploc/#5100";
  1040.         MoreButton.image="res://wmploc/#5060";
  1041.         MoreButton.downImage="res://wmploc/#5060";
  1042.         MoreButton.hoverImage="res://wmploc/#5060";
  1043.         MoreButton.mappingImage="res://wmploc/#5065";
  1044.  
  1045.         taskBtnPlayGroup.image="res://wmploc/#5050";
  1046.         taskBtnPlayGroup.hoverImage="res://wmploc/#5052";
  1047.         taskBtnPlayGroup.downImage="res://wmploc/#5052";
  1048.         taskBtnPlayGroup.mappingImage="res://wmploc/#5053";
  1049.  
  1050.         taskBtnServicesMenuGroup.image="res://wmploc/#5055";
  1051.         taskBtnServicesMenuGroup.hoverImage="res://wmploc/#5057";
  1052.         taskBtnServicesMenuGroup.downImage="res://wmploc/#5057";
  1053.         taskBtnServicesMenuGroup.mappingImage="res://wmploc/#5053";
  1054.         
  1055.         svSharkFin.backgroundImage="res://wmploc/#5070";
  1056.         svSharkFinBottom.backgroundImage="res://wmploc/#5073";
  1057.         
  1058.         svServices.backgroundImage="res://wmploc/#5110";
  1059.         svServicesEndcapRight.backgroundImage="res://wmploc/#5115";
  1060.     }
  1061. }
  1062.  
  1063. var g_rightmostButton=null;
  1064. var g_servicesMaxWidth=315;
  1065. function UpdateOverflowButtonVisible(force_layout)
  1066. {
  1067.     var rightmost_taskbuttonedge = g_rightmostButton.left+g_rightmostButton.width;
  1068.     var barwidth = svTaskButtons.width;
  1069.     var overflow = (barwidth <= g_servicesMaxWidth + rightmost_taskbuttonedge);
  1070.     MoreButton.visible = svTaskButtons.visible && overflow;
  1071.     if (overflow)
  1072.     {
  1073.         svServices.horizontalAlignment="left";
  1074.         svServices.width = barwidth - rightmost_taskbuttonedge-7;
  1075.         svServices.left = barwidth - svServices.width;
  1076.     }
  1077.     else
  1078.     {
  1079.         if (force_layout || (svServices.horizontalAlignment!="right"))
  1080.         {
  1081.             svServices.horizontalAlignment="left";
  1082.             svServices.width = g_servicesMaxWidth;
  1083.             svServices.left=barwidth-g_servicesMaxWidth-7;
  1084.         }
  1085.         svServices.horizontalAlignment="right";
  1086.     }
  1087. }
  1088.  
  1089. function UpdateServicesVisible(left)
  1090. {
  1091.     svServices.visible = ( left >= (g_rightmostButton.left + g_rightmostButton.width + svSharkFin.width - 4) );
  1092. }
  1093.  
  1094. function UpdateServiceButtonCount()
  1095. {
  1096. //    TestLog("-guideURL:   " + brand.task1URL);
  1097. //    TestLog("-serviceURL: " + brand.task2URL);
  1098. //    TestLog("-radioURL:   " + brand.task3URL);
  1099.     var task1ON = brand.task1URL!="";
  1100.     var task2ON = brand.task2URL!="";
  1101.     var task3ON = brand.task3URL!="";
  1102.  
  1103.     ToggleServiceButton(1, task1ON);
  1104.     ToggleServiceButton(2, task2ON);
  1105.     ToggleServiceButton(3, task3ON);
  1106.     
  1107.     g_servicebuttons = new Array();
  1108.     if (task1ON) g_servicebuttons[g_servicebuttons.length] = new taskbutton(taskBtnServiceTask1_background, taskBtnServiceTask1Group, taskBtnServiceTask1Caption);
  1109.     if (task2ON) g_servicebuttons[g_servicebuttons.length] = new taskbutton(taskBtnServiceTask2_background, taskBtnServiceTask2Group, taskBtnServiceTask2Caption);
  1110.     if (task3ON) g_servicebuttons[g_servicebuttons.length] = new taskbutton(taskBtnServiceTask3_background, taskBtnServiceTask3Group, taskBtnServiceTask3Caption);
  1111.  
  1112.     //TestLog("on/off: " + task3ON + task1ON + task2ON);
  1113.     if (g_servicebuttons.length>0)
  1114.     {
  1115.         //TestLog("left service: " + g_servicebuttons[0].subview.id + ", left: " + g_servicebuttons[0].subview.left);
  1116.         //g_servicebuttons[0].subview.left=g_servicebuttonoffset;
  1117.     }
  1118.     layoutbuttons(g_servicebuttons);
  1119. }
  1120. var g_servicebuttonoffset=52;
  1121.  
  1122. function ToggleServiceButton(tasknumber, btnenabled)
  1123. {
  1124.     var btn = eval( "taskBtnServiceTask" + tasknumber + "_background");
  1125.     btn.visible = btnenabled;
  1126.     var bg = eval("taskBtnServiceTask" + tasknumber + "Group");
  1127.     bg.visible=btnenabled;
  1128. }
  1129.  
  1130. function LayoutTaskbar()
  1131. {
  1132.     FitTaskbarButtonsToCaptions();
  1133.     var changed = ArrangeTaskbarButtons();
  1134.     UpdateOverflowButtonVisible(changed);
  1135. }
  1136.  
  1137. //this pushes all the taskbar buttons around when one of the sizes changes
  1138. function ArrangeTaskbarButtons()
  1139. {
  1140. //    TestLog("ArrangeTaskbarButtons()");
  1141.     layoutbuttons(g_taskbuttons);
  1142.     layoutbuttons(g_servicebuttons);
  1143.     var rightmostbtn = g_servicebuttons[g_servicebuttons.length-1].subview;
  1144.     var previous = g_servicesMaxWidth;
  1145.     g_servicesMaxWidth = svSharkFin.width + 3*(taskBtnServiceTask1Group.width) + g_overflowWidth;
  1146.     return (previous!=g_servicesMaxWidth);
  1147. }
  1148. var g_overflowWidth=70;
  1149.  
  1150. function layoutbuttons(arrayofbuttons)
  1151. {
  1152.     if (null!=arrayofbuttons)
  1153.     {
  1154.        for (i=1; i<arrayofbuttons.length; i++)
  1155.        {
  1156. //            TestLog( "    "+ arrayofbuttons[i].subview.ID + ": setting left to " + (arrayofbuttons[i-1].subview.left + arrayofbuttons[i-1].subview.width) );
  1157.             arrayofbuttons[i].subview.left = arrayofbuttons[i-1].subview.left + arrayofbuttons[i-1].subview.width;
  1158.        }
  1159.     }
  1160. }
  1161.  
  1162. //this handles the clipping behavior in which various buttons appear/disappear in different order
  1163. function HandleTaskBarResize()
  1164. {
  1165.     UpdateOverflowButtonVisible();
  1166. }
  1167. var g_taskbuttons;
  1168. var g_servicebuttons;
  1169.  
  1170. function InitTaskbarSet()
  1171. {
  1172.     g_taskbuttons = new Array (
  1173.         new taskbutton(taskBtnNowPlaying_background,    taskBtnNowPlayingGroup,         taskBtnNowPlayingCaption),
  1174.         new taskbutton(taskBtnMediaLibrary_background,  taskBtnMediaLibraryGroup,       taskBtnMediaLibraryCaption),
  1175.         new taskbutton(taskBtnCDAudio_background,       taskBtnCDAudioGroup,            taskBtnCDAudioCaption),
  1176.         new taskbutton(taskBtnBurn_background,          taskBtnBurnGroup,                taskBtnBurnCaption),
  1177.         new taskbutton(taskBtnSync_background,          taskBtnSyncGroup,               taskBtnSyncCaption),
  1178.         new taskbutton(taskBtnPlayerGuide_background,   taskBtnPlayerGuideGroup,        taskBtnPlayerGuideCaption)
  1179.     );
  1180.     g_servicebuttons = new Array (    
  1181.         new taskbutton(taskBtnServiceTask1_background,  taskBtnServiceTask1Group,       taskBtnServiceTask1Caption),
  1182.         new taskbutton(taskBtnServiceTask2_background,  taskBtnServiceTask2Group,       taskBtnServiceTask2Caption),
  1183.         new taskbutton(taskBtnServiceTask3_background,  taskBtnServiceTask3Group,       taskBtnServiceTask3Caption)
  1184.    );
  1185. }
  1186.  
  1187. function taskbutton(subview, button, caption)
  1188. {
  1189.     this.subview=subview;
  1190.     this.button=button;
  1191.     this.caption=caption;
  1192.     this.wide=false;
  1193. }
  1194.  
  1195. var g_kTaskButtonDefaultWidth=64;
  1196.  
  1197. function UpdateLogoImages()
  1198. {
  1199.     logoanimation.image="";
  1200.     logoanimation.image="WMPImage_SeviceBrandLogo";
  1201. }
  1202.  
  1203. //TODO - temp for usability study
  1204. function GetTaskCaption(prefname, resourceID)
  1205. {
  1206.     return theme.loadString("res://wmploc/RT_STRING/#" + resourceID);
  1207. }
  1208.  
  1209. // ============================== LOGO ANIMATION ========================================
  1210. var g_logogoingup=true;
  1211. var g_logoanimationcount=0;
  1212.  
  1213.  
  1214. // ============================== Metadata and Task Status ========================================
  1215.  
  1216. var g_appTimerInterval=3000;
  1217. function set_apptimer()
  1218. {
  1219.     svUpperLeftCorner_appTimer.moveTo(0,0,g_appTimerInterval);    
  1220. }
  1221. function tick()
  1222. {
  1223.     OnTimerMainApp();
  1224.     set_apptimer();
  1225. }
  1226.  
  1227. var g_ShowingTaskStatus=false;
  1228. function OnTimerMainApp()
  1229. {
  1230.     if (player.playState!=psPlaying)
  1231.     {
  1232.         if (g_TopStatusStrings.length==0)
  1233.         {
  1234.             ShowStatus("");
  1235.         }
  1236.         RotateTaskStatus();
  1237.         return;
  1238.     }
  1239.     
  1240.     //we linger on the last one and rotate through the task status if available...
  1241.     if ( (g_MetaDataCollectionManager.currentIndex == g_MetaDataCollectionManager.metaDataCollection.length)  
  1242.          && RotateTaskStatus() )
  1243.     {
  1244.         //already did our work in RotateTaskStatus()
  1245.     }
  1246.     else
  1247.     {
  1248.         OnTimerTransport();
  1249.     }
  1250. }
  1251.  
  1252. var g_taskstatus=false;
  1253. function RotateTaskStatus()
  1254. {
  1255.     var stat = GetTaskStatus(g_TaskStatusIndex);
  1256.     g_TaskStatusIndex++;
  1257.     if ( g_taskstatus && (stat!="") && (g_TaskStatusIndex<g_NumStatusStringsToShow) )
  1258.     {
  1259.         ShowStatus(stat);
  1260.         g_taskstatus=true;
  1261.         return true;
  1262.     }
  1263.     
  1264.     g_TaskStatusIndex=0;
  1265.     return false;
  1266. }
  1267.  
  1268. var g_NumStatusStringsToShow=3;
  1269. var g_TaskStatusIndex=0;
  1270.  
  1271.  
  1272. var g_TopStatusStrings=new Array();
  1273. function GetTaskStatus(index)
  1274. {
  1275.     if (index==0)
  1276.     {
  1277.         UpdateTopStatusStrings();
  1278.     }
  1279.     
  1280.     if (index < g_TopStatusStrings.length)
  1281.     {
  1282.         return g_TopStatusStrings[index];
  1283.     }
  1284.     return "";
  1285. }
  1286.  
  1287. function UpdateTopStatusStrings()
  1288. {
  1289.     var iTotalStatusStrings=5;
  1290.     
  1291.     g_TopStatusStrings = new Array();
  1292.     for (var i=0; ((i<iTotalStatusStrings) && (g_TopStatusStrings.length<=g_NumStatusStringsToShow)); i++)
  1293.     {
  1294.         switch(i)
  1295.         {
  1296.             case 0:
  1297.                 AppendStatusIfAvailable("burn");
  1298.                 break;
  1299.             case 1:
  1300.                 AppendStatusIfAvailable("rip");
  1301.                 break;
  1302.             case 2:
  1303.                 AppendStatusIfAvailable("content");
  1304.                 break;
  1305.             case 3:
  1306.                 AppendStatusIfAvailable("sync");
  1307.                 break;
  1308.             case 4:
  1309.                 AppendStatusIfAvailable("mls");
  1310.                 break;
  1311.         }
  1312.     }
  1313. }
  1314.  
  1315. function AppendStatusIfAvailable(category)
  1316. {
  1317.     var str = helper.getStatusString(category);
  1318.     if (str!="")
  1319.     {
  1320.         g_TopStatusStrings.push(str);
  1321.     }
  1322. }
  1323.  
  1324. function DoNotification(str)
  1325. {
  1326.     notification.value=str;
  1327.  
  1328.     if (g_notifystate==0)
  1329.     {
  1330.         notification.visible=true;
  1331.         g_notifystate=3;
  1332.         g_metadatatop = metadata.top;
  1333.         metadata.verticalAlignment="top";
  1334.         metadata.moveTo(metadata.left,svMarquee.height+g_metadatatop,330);
  1335.     }
  1336. }
  1337.  
  1338. function NotificationTick()
  1339. {
  1340.     switch(g_notifystate)
  1341.     {
  1342.         case 3:
  1343.             //pause for a moment...
  1344.             g_notifystate--;
  1345.             metadata.moveTo(metadata.left, metadata.top, 4000);
  1346.             break;
  1347.         case 2:
  1348.             g_notifystate--;
  1349.             metadata.moveTo(metadata.left, g_metadatatop, 330);
  1350.             break;
  1351.         case 1:
  1352.             metadata.verticalAlignment="center";
  1353.             notification.visible=false;
  1354.             g_notifystate--;
  1355.             break;            
  1356.     }
  1357. }
  1358. var g_metadatatop=0;
  1359. var g_notifystate=0;
  1360.  
  1361. function UpdateSeek()
  1362. {
  1363.     seek.value=player.controls.currentPosition;
  1364.     seek.moveTo(seek.left,seek.top,33);
  1365. }
  1366.  
  1367. function LayoutAppCaption()
  1368. {
  1369.     appCaption.horizontalAlignment="left";
  1370.     appCaption.width = svAppFillTop.width - appCaption.left - tracktime_top.width - 5;
  1371.     appCaption.horizontalAlignment="stretch";
  1372.     tracktime_top.left = svAppFillTop.width - tracktime_top.width - 90;
  1373.     tracktime_top.horizontalAlignment="right";
  1374. }
  1375.